#!usr/bin/env python3
# -*- encoding: utf-8 -*-
from playwright.sync_api import Page
import allure
from loguru import logger


# Page类是一个同步 API，用于控制浏览器页面的操作，包括导航、元素操作、事件监听等。
# 可以用来进行自动化测试、网页截图、页面截图等任务
# todo login单拿登录 po  两个文件维护元素和操作 导航条 元素和用例完全分离


def page_element_click(page: Page, selector, index=0):
    """
    登录页面点击事件。
    参数:
        page: Playwright中的页面对象。
        selector: 选择器，用于定位页面元素。
        index: 匹配的选择器的索引，默认为0，即匹配第一个元素。
    """
    """
    with关键字在这里的作用是确保在进入该语句块前后会执行一些必要的操作，
    比如在开始执行步骤时，Allure会记录下这个步骤的开始时间及描述信息（即点击特定元素的动作）；
    当离开with语句块时，Allure会自动捕获并记录该步骤的结果（如成功或失败）。
    这样，即使在步骤执行过程中出现异常，也能确保测试报告能够完整反映出实际执行的每个步骤情况。
    """
    # selector参数表示元素的选择器，index参数表示要点击的元素在定位器中的索引
    with allure.step(f'点击了元素-{selector}'):
        logger.info(f'点击了元素-{selector}')
    # 通过page.locator方法定位到该元素，并使用nth方法选择指定索引的元素，最后调用click方法模拟用户点击该元素
    page.locator(selector=selector).nth(index).click()


def page_element_input_fill(page: Page, selector, value):
    """
    页面input框文本填充。
    参数:
        page: Playwright中的页面对象。
        selector: 选择器（id class。。），用于定位页面元素。
        value: 需要填充的文本内容。
    """
    with allure.step(f'元素-{selector},填充文本-{value}'):
        logger.info(f'元素-{selector},填充文本-{value}')
    page.fill(selector=selector, value=value)


def page_element_input_fill2(page: Page, placeholder_text, value, index=1):
    """
    页面input框文本填充。
    参数:
        page: Playwright中的页面对象。
        placeholder_text: input框的占位符文本（文本框内的文字来定位）。
        value: 需要填充的文本内容。
        index: 占位符匹配的索引，默认为1，即匹配第一个占位符的元素。
    """
    with allure.step(f'{placeholder_text}-输入框,填充文本-{value}'):
        logger.info(f'{placeholder_text}-输入框,填充文本-{value}')
    page.get_by_placeholder(text=placeholder_text).nth(index).fill(value=value)


def page_swipe(page: Page, x, y):
    """
    页面滑动方法封装。
    参数:
        page: Playwright中的页面对象。
        x: 滑动的横向偏移量。
        y: 滑动的纵向偏移量。
    """
    with allure.step(f'滑动元素,坐标-{x, y}'):
        logger.info(f'滑动元素,坐标-{x, y}')
    page.mouse.wheel(delta_x=x, delta_y=y)


def page_open(page: Page, url):
    """
    打开页面方法封装。
    参数:
        page: Playwright中的页面对象。
        url: 需要打开的页面网址。
    """
    with allure.step(f'打开-{url}'):
        logger.info(f'打开-{url}')
    page.goto(url=url)
